[참조]
- Dookie Kim, Python: From Beginning to Application, 2022 [PDF]
📖 목차
-
(1) 키워드(keyword)
(2) 식별자(identifier): 변수명 만들기
(3) 구문(statement)의 들여쓰기(indentation)
(4) 주석(comment)
(5) 변수(variable)
(6) 데이터 타입(data type)
(7) 입출력(input/output)
(8) 모듈(module)
(9) 패키지(package), import
(10) 연산자(operator)
(11) 여러 줄 → 한줄(;); 한 줄 → 여러 줄(\) 연속; 줄바꾸기
(12) 괄호: 소괄호, 중괄호, 대괄호
(1) 키워드(keyword)
- 파이썬에서 미리 예약된 33개의 단어로, 변수명으로 사용할 수 없음
- and, as, assert, break, class, continue, def, del, elif, else, except, FALSE
finally, for, from, global, if, import, in, is, lambda, None, nonlocal
not, or, pass, raise, return, try, while, with, yield, TRUE
(2) 식별자(identifier) - 변수명 만들기
- 변수, 함수, 클래스, 모듈 또는 다른 객체를 식별하는데 사용되는 이름
- 알파벳, 숫자, 밑줄(_) 조합 가능 (예: `myClass`, `var_1`, `print_this_to_screen`)
- 대소문자 구별 (예: `Variable` ≠ `variable`)
- 숫자로 시작할 수 없음 (예: `1variable` ❌, `variable1` ✅)
- 파이썬 키워드는 변수명으로 사용 불가
- 특수문자(`@, #, $, %`)는 변수명에 사용할 수 없음
- 길이는 제한이 없음
- 클래스 이름: 대문자로 시작 (예: class MyClass:)
- 클래스 속성: 2개의 밑줄로 시작 (예: __attribute)
- 1개의 밑줄로 시작: 내부적으로 사용되는 변수 (예: _variable)
- 1개의 밑줄로 종료: 파이썬 키워드와 충돌을 피하기 위함 (예: class_)
- 2개의 밑줄로 종료: 사용자가 조정할 수 있는 네임스페이스(namespace) 안의 속성 (예: name__)
- 2개의 밑줄로 시작하고 종료: 파이썬이 제공하는 특수 특성 및 메서드 (예: __name__)
- 패키지와 같은 모듈 이름에 숫자나 특수문자를 사용할 수 없음
(3) 구문(statement) - 들여쓰기(indentation)
- 파이썬은 공백을 사용하여 블록을 구분 (예: if문, 함수 정의 등)
- 여러 구문을 한 줄에 쓰려면 세미콜론(;) 사용 가능 (예:
print(a); print(b))
[예시] 파이썬 공식 스타일 가이드에서는 4칸(space) 들여쓰기를 권장
for i in range(5):
print(i)
(4) 주석(comment)
- 단일 행 주석:
# 한 줄 주석 - 여러 줄 주석:
""" 여러 줄 주석 """또는''' 여러 줄 주석 '''
(5) 변수(variable)
- 변수 선언:
a = 5
(6) 데이터 타입(data type)
- 숫자형: `int`, `float`, `complex`
- 문자열: `str`
- 리스트: `list`
- 튜플: `tuple`
- 딕셔너리: `dict`
- 집합: `set`
- 논리형: `bool` (`True`, `False`)
(7) 입출력(input/output)
- 일반적인 입력함수는 input()이며, 출력함수는 print()이다.
(8) 모듈(module), import
- 모듈(module)은 각종 변수, 함수, 클래스를 담고 있는 파일이다.
- import 키워드를 사용하여 모듈을 코딩에 가져올 수 있다.
(9) 패키지(package)
- 패키지(package)는 여러 모듈을 묶은 것이다.
(10) 연산자(operator)
1) 산술 연산자 (Arithmetic Operators): +, -, *, /, %, //, **
2) 비교 연산자 (Comparison Operators)
1) 산술 연산자 (Arithmetic Operators): +, -, *, /, %, //, **
※ //는 나눈 후, 나온 값보다 같거나 작은 최대 정수를 반환한다. MATLAB의 floor(/) 함수에 해당한다.
| 기능 | MATLAB(1) | PYTHON | C++ | F77, F90/95(2) |
|---|---|---|---|---|
| 덧셈 | + | + | + | + |
| 뺄셈 | - | - | - | - |
| 곱셈 | * 및 .* | * | * | * |
| 나눗셈 | / 및 ./ | / | / | / |
| 지수 | ^ 및 .^ | pow(x, y) 또는 ** | pow(x, y) | ** |
| 나머지 | % | % | ||
| 증가분 | i += 1 | i++ | ||
| 감소분 | i -= 1 | i-- | ||
| 그룹 구분 | ( ) | ( ) | ( ) | ( ) |
(1) MATLAB에서는 연산자 앞의 ‘.’는 요소별(또는 스칼라) 연산이 필요할 경우 사용한다.
(2) F90/95에서는 필요한 경우 새로운 연산자를 정의하여 사용할 수 있다.
(3) xy는 함수로 표현되며, pow(x, y)로 나타낸다.
[Note] 파이썬에서의 + 연산자
[Note] 연산자 오버로딩
2) 비교 연산자 (Comparison Operators)
비교 연산자는 두 피연산자의 관계를 비교하여 논리값 True 또는 False를 반환한다.
조건문이나 반복문 등에서 자주 활용되며, 연산의 결과는 항상 불리언(boolean) 값이다.
a = 10
b = 5
print(a > b) # True: a가 b보다 크다
print(a < b) # False: a가 b보다 작다
print(a == b) # False: a와 b가 같다
print(a != b) # True: a와 b가 같지 않다
print(a >= b) # True: a가 b보다 크거나 같다
print(a <= b) # False: a가 b보다 작거나 같다
3) 논리 연산자 (Logical Operators)
논리 연산자는 불리언 연산을 수행하며, 조건을 결합하거나 부정하는 데 사용된다.
and, or, not 세 가지 연산자가 존재하며, 복합 조건을 평가할 때 널리 사용된다.
x = True
y = False
print(x and y) # False: 둘 다 True일 때만 True
print(x or y) # True: 둘 중 하나라도 True이면 True
print(not x) # False: x가 True이면 not x는 False
논리 연산자는 조건문과 결합하여 복잡한 판단을 수행할 수 있도록 하며, 다른 비교 연산자와 함께 자주 활용된다.
[Note] 비교 및 논리 연산자 비교표 (언어별)
| 기능 | MATLAB | PYTHON | C++ | F90/95 | F77 |
|---|---|---|---|---|---|
| Equal to (같음) | == | == | == | == | .EQ. |
| Not equal to (같지 않음) | ~= | != | != | /= | .NE. |
| Less than (보다 작음) | < | < | < | < | .LT. |
| Less than or equal to (작거나 같음) | <= | <= | <= | <= | .LE. |
| Greater than (보다 큼) | > | > | > | > | .GT. |
| Greater than or equal to (크거나 같음) | >= | >= | >= | >= | .GE. |
| Logical NOT (부정) | ~ | not | ! | .NOT. | .NOT. |
| Logical AND (논리곱) | && | and | && | .AND. | .AND. |
| Logical inclusive OR (논리합) | || | or | || | .OR. | .OR. |
| Logical exclusive OR (배타적 논리합) | xor | ^ | .XOR. | .XOR. | |
| Logical equivalent (논리적 동치) | == | == | == | .EQV. | .EQV. |
| Logical not equivalent (논리적 비동치) | ~= | != | != | .NEQV. | .NEQV. |
(1) Bit logical AND, exclusive OR, OR, NOT에 대해서는 &, ^, |, ~ 연산자를 사용한다.
4) 비트 연산자 (Bitwise Operators)
&: 비트 AND|: 비트 OR~: 비트 NOT^: 비트 XOR (배타적 논리합)>>: 오른쪽 시프트<<: 왼쪽 시프트
비트 연산자는 정수의 이진 표현을 기준으로 각 비트 단위 연산을 수행한다. 다음과 같은 연산자가 존재한다:
5) 할당 연산자 (Assignment Operators)
할당 연산자는 변수에 값을 대입하거나 기존 변수의 값을 연산하여 갱신하는 데 사용된다.
기본적인 할당 연산자인 = 외에도, 다양한 축약형 연산자가 존재한다.
| 연산자 | 예 |
|---|---|
= |
a = b |
+= |
a += b는 a = a + b를 의미함 |
-= |
a -= b는 a = a - b를 의미함 |
*= |
a *= b는 a = a * b를 의미함 |
/= |
a /= b는 a = a / b를 의미함 |
%= |
a %= b는 a = a % b를 의미함 |
//= |
a //= b는 a = a // b를 의미함 |
**= |
a **= b는 a = a ** b를 의미함 |
6) 콜론 연산자 (Colon Operator: :)
콜론 연산자 :는 배열이나 시퀀스 자료형에서 범위를 지정하거나, 슬라이싱(slicing) 구문을 표현하는 데 사용된다.
Fortran(F90/95), MATLAB, Python 등 다양한 언어에서 활용되며, 언어에 따라 사용 범위와 문법이 다소 상이하다.
| 구문 | F90/95 | MATLAB/PYTHON | 용법 | F90/95 | MATLAB/PYTHON |
|---|---|---|---|---|---|
| 기본 형식 | B:E:I(1) | B:I:E | 1. 배열 요소 위치 | 사용 가능 | 사용 가능 |
| ≥ B | B: | B: | 2. 문자열에서 문자 위치 | 사용 가능 | 사용 가능 |
| ≤ E | :E | :E | 3. 반복문 제어 | 사용 불가 | 사용 가능 |
| 전체 영역 | : | : 또는 ... (생략기호)(3) | 4. 배열 요소 생성 | 사용 불가 | 사용 가능 |
| 마지막 인덱스 | - | -1(2) | 사용 불가 | 사용 가능 |
(1) B = 시작값(beginning), E = 끝값(ending), I = 증분값(increment)
(2) 배열의 마지막 인덱스: Python에서는 -1을 사용할 수 있다.
[예시]
c = array([[1, 2, 3], [4, 5, 6]])
c[-1, :] # 결과: array([4, 5, 6])
c[:, -1] # 결과: array([3, 6])
(3) 생략기호(Ellipsis): 배열의 전체를 나타낼 때 Python에서는 ...을 사용할 수 있다.[예시]
c = array([[1, 2, 3], [4, 5, 6]])
c[...] # 결과: array([[1, 2, 3], [4, 5, 6]])
7) 특수 연산자 (Special Operators)
is: 두 객체가 동일한 객체임을 판단함is not: 두 객체가 동일하지 않음을 판단함in: 특정 요소가 시퀀스(리스트, 튜플, 문자열 등)에 포함되어 있는지를 판단함not in: 특정 요소가 시퀀스에 포함되어 있지 않은지를 판단함
파이썬에서는 다음과 같은 특수 연산자를 제공한다. 이들은 객체 간의 관계나 포함 여부 등을 판단하는 데 사용된다.
8) 행렬 곱 연산자 (Matrix Multiplication Operator: @)
파이썬의 @ 연산자는 2차원 배열(Numpy 배열 등) 간의 행렬 곱을 수행하는 데 사용된다.
이 연산자는 파이썬 3.5부터 도입되었으며, numpy.dot() 또는 matmul() 함수와 같은 기능을 수행한다.
[예시] 행렬 곱
>>> c = array([[1, 2, 3],
[4, 5, 6]])
>>> b = c
>>> c @ b.T
Out[19]:
array([[14, 32],
[32, 77]])
(11) 여러 줄 → 한 줄; 한 줄 → 여러 줄(\) 연속; 줄바꾸기
1) 한 줄을 여러 줄로 나누어 작성할 경우 (역슬래시 \ 사용)
# 역슬래시를 사용하여 여러 줄로 분리
a = 1 + 2 + 3 + \
4 + 5 + 6 + \
7 + 8 + 9
2) 괄호를 사용하는 경우에는 자동으로 줄바꿈이 허용됨
# 소괄호 사용
a = (1 + 2 + 3 +
4 + 5 + 6 +
7 + 8 + 9)
# 리스트를 여러 줄로 작성
my_list = [
1, 2, 3,
4, 5, 6
]
# 딕셔너리를 여러 줄로 작성
my_dict = {
"name": "Alice",
"age": 30
}
3) 여러 줄을 한 줄로 작성할 경우 (세미콜론 ; 사용)
# 세미콜론을 사용하여 여러 구문을 한 줄에 작성
a = 1; b = 2; c = a + b
(12) 괄호: 소괄호 (), 중괄호 {}, 대괄호 []
1) 소괄호 ( )
# 함수 호출
print("Hello")
# 수식 우선순위를 명확히 하기
result = (2 + 3) * 4
# 튜플 생성
my_tuple = (1, 2, 3)
# 여러 줄 표현 시 사용
total = (
1 + 2 + 3 +
4 + 5 + 6
)
2) 중괄호 { }
# 딕셔너리 생성
person = {"name": "Alice", "age": 30}
# 집합 생성
unique_numbers = {1, 2, 3, 2}
# f-string 표현식에 변수 삽입
name = "Bob"
greeting = f"Hello, {name}!"
3) 대괄호 [ ]
# 리스트 생성
fruits = ["apple", "banana", "cherry"]
# 리스트 인덱싱
first_fruit = fruits[0]
# 리스트 슬라이싱
some_fruits = fruits[0:2]
# 리스트 컴프리헨션
squares = [x**2 for x in range(5)]